#ifndef AUDIOPLAYER_H
#define AUDIOPLAYER_H

#include <QObject>
#include <QAudioOutput>
#include <QAudioFormat>
#include <QBuffer>
#include <QByteArray>
#include <QTimer>
#include "../logging/logger.h"

class AudioPlayer : public QObject
{
    Q_OBJECT

public:
    explicit AudioPlayer(QObject *parent = nullptr);
    ~AudioPlayer();
    
    // 启动音频播放
    bool start();
    
    // 停止音频播放
    void stop();
    
    // 判断是否正在播放
    bool isPlaying() const;
    
    // 设置音量 (0.0-1.0)
    void setVolume(float volume);
    
    // 获取音量
    float getVolume() const;
    
    // 静音/取消静音
    void setMuted(bool muted);
    
    // 是否静音
    bool isMuted() const;
    
    // 设置音频格式
    void setAudioFormat(int sampleRate, int channelCount, int sampleSize);
    
    // 获取音频格式
    void getAudioFormat(int &sampleRate, int &channelCount, int &sampleSize) const;

public slots:
    // 处理接收到的音频数据
    void processAudioData(const QByteArray &data);

signals:
    // 错误信号
    void errorOccurred(const QString &errorMsg);
    
    // 状态改变信号
    void stateChanged(QAudio::State state);

private slots:
    // 处理音频状态变化
    void handleStateChanged(QAudio::State state);
    
    // 检查并播放缓冲区数据
    void checkBuffer();

private:
    QAudioOutput *audioOutput;
    QAudioFormat audioFormat;
    QBuffer audioBuffer;
    QByteArray bufferData;
    QTimer bufferTimer;
    
    bool playing;
    float volumeLevel;
    bool muteState;
    int sampleRate;
    int channelCount;
    int sampleSize;
    int bufferSize;
    
    // 初始化音频格式
    void initAudioFormat();
    
    // 设置缓冲区大小
    void setBufferSize(int size);
    
    // 重置播放状态
    void resetState();
};

#endif // AUDIOPLAYER_H 